/**
 * Copyright &copy; 2013-2015 山东易科德软件有限公司 All rights reserved.
 */
package cn.net.ecode.common.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;

import cn.net.ecode.common.persistence.BaseEntity;
import cn.net.ecode.modules.sys.utils.DataScopeUtils;

/**
 * Service基类
 * @author ThinkGem
 * @version 2014-9-4
 */
@Transactional(readOnly = true)
public abstract class BaseService {
	
	/**
	 * 日志对象
	 */
	protected Logger logger = LoggerFactory.getLogger(getClass());

	/**
	 * 数据范围过滤
	 * @param entity 当前过滤的实体类
	 * @param sqlMapKey sqlMap的键值，例如设置“dsf”数据范围过滤，详见 example
	 * @param ctrlTypes 内置控制类型（role,company,office），如果读取管理表，则类型后加“_m”，如（role_m,company_m,office_m）
	 * @param bizTableAliasOrFields 业务表对应过滤表别名或需要过滤的权限字段，使用“,”分隔，长度必须与tableTypes保持一致。
	 * @param bizTableUserField 业务表对应表别名或用户字段。过滤只可以查看本人数据。不设置的话，如果没有范围权限，则查不到任何数据。
	 * @example
	 * 		1）在Service中调用如下两种方式：
	 * 			// 生成数据权限过滤条件，指定内置控制类型（role,company,office）
	 * 			DataScopeUtils.genSql(entity, "dsf", "role,company,office", "a,a,c"));
	 * 			// 生成数据权限过滤条件，指定内置控制类型，当没有关联数据范围权限时只查询本人数据的时候使用
	 * 			DataScopeUtils.genSql(entity, "dsf", "role,company,office", "a,a,c", "a.create_by"));
	 * 			// 生成数据权限过滤条件，主表字段不一致时使用
	 * 			DataScopeUtils.genSql(entity, "dsf", UserDataScope.CTRL_TYPE_OFFICE, "a.office_code"));
	 * 			// 生成数据权限过滤条件，主表字段不一致时，当没有关联数据范围权限时只查询本人数据的时候使用
	 * 			DataScopeUtils.genSql(entity, "dsf", UserDataScope.CTRL_TYPE_OFFICE, "a.office_code", "a.create_by"));
	 * 		2）MyBatis Mapper 中调用如下两种方式：
	 * 			采用 EXISTS方式调用	： 将  ${sqlMap.sdf} 放在Where后
	 * 			采用JOIN方式调用		： 将  ${sqlMap.sdfFrom} 放在Form后 ，将  ${sqlMap.sdfWhere} 放在Where后
	 * @deprecated DataScopeUtils.genSql(entity, sqlMapKey, ctrlTypes, bizTableAliasOrFields);
	 */
	@Deprecated
	public static void dataScopeFilter(BaseEntity<?> entity, String sqlMapKey, String ctrlTypes, String bizTableAliasOrFields) {
		DataScopeUtils.genSql(entity, sqlMapKey, ctrlTypes, bizTableAliasOrFields);
	}
	
}
